<?php 

	class motor
	{
		/**************************************************************************
		Iniciacion de variables globales
		***************************************************************************/
		var $lista_sufijos="";
		var $lista_articulos="";
		var $lista_stop_word="";
		/**************************************************************************
		Esta funcion llena las listas de sufijos y articulos
		***************************************************************************/
		function llenado_listas_articulo($data_acces)
		{
			//saca los articulos de la base de datos
			$articulos='';
			$sql1="SELECT `articulo`.`articulo`, `articulo`.`tamano` FROM `articulo` ORDER BY `articulo`.`tamano` ASC";
			$motordb = new mydb($data_acces['host'], $data_acces['user'], $data_acces['pass'], $data_acces['db']);
			$motordb->db_query($sql1);
			$cont=0;
			while($motordb->db_next())
			{
				$motot_list= $motordb->row_object;
				$articulos[$cont][0]=$motot_list->articulo;
				$articulos[$cont][1]=$motot_list->tamano;
				$cont++;
			}
			//echo mysql_error();
			$motordb->db_close();
			
			return $articulos;
		}
		
		function llenado_listas_stopword($data_acces)
		{
			//saca los stop word de la base de datos
			$sql3="SELECT `stopword`.`stopword`, `stopword`.`tamano` FROM `stopword` ORDER BY `stopword`.`tamano` ASC";
			$motordb = new mydb($data_acces['host'], $data_acces['user'], $data_acces['pass'], $data_acces['db']);
			$motordb->db_query($sql3);
			$cont=0;
			while($motordb->db_next())
			{
				$motot_list= $motordb->row_object;
				$stop_word[$cont][0]=$motot_list->stopword;
				$stop_word[$cont][1]=$motot_list->tamano;
				$cont++;
			}
			//echo mysql_error();
			$motordb->db_close();
			
			return $stop_word;
		}
		
		function llenado_listas_sufijos($data_acces)
		{
			//saca los sufijos de la base de datos
			$sql2="SELECT `sufijo`.`sufijo`, `sufijo`.`tamano` FROM `sufijo` ORDER BY `sufijo`.`tamano` DESC, `sufijo`.`sufijo` ASC";
			$motordb = new mydb($data_acces['host'], $data_acces['user'], $data_acces['pass'], $data_acces['db']);
			$motordb->db_query($sql2);
			$cont=0;
			while($motordb->db_next())
			{
				$motot_list= $motordb->row_object;
				$sufijos[$cont][0]=$motot_list->sufijo;
				$sufijos[$cont][1]=$motot_list->tamano;
				$cont++;
			}
			//echo mysql_error();
			$motordb->db_close();

			return $sufijos;
		}
		/***************************************************************************
		saca los stop word de la sentencia
		****************************************************************************/
		function Sacar_stop_word($sentencia, $lista_stop_word)
		{
			$sentencia_sin_stop_word="";
			$numero_stop_word=count($lista_stop_word);
			$numero_palabras=count($sentencia);
			
			$cont=0;
			$aux="";
			
			for($rec_palabra=0; $rec_palabra<$numero_palabras; $rec_palabra++)//recorre el numero de celdas del arreglo
			{	
				$conti=0;
	
				for($rec_stopword=0; $rec_stopword<$numero_stop_word; $rec_stopword++)//recorre el numero de stop word encontrado
				{
					
					$aux1=$sentencia[$rec_palabra];
					$aux2=$lista_stop_word[$conti][0];
					$conti++;
					
					if(strcmp($aux1,$aux2) == 0)//verifica si existe algun estop word en la sentencia
					{
						$aux="";
						break;
					}
					else
					{ 
						$aux=$aux1; 
					}
				}
				
				if($aux != "")
				{
					$sentencia_sin_stop_word[$cont]=$aux;
					$cont++;
				}
				
			}
			
			return $sentencia_sin_stop_word; 
		}
		/**************************************************************************
		Esta funcion saca los sufijos de la oracion o sentnecia y devuelve la 
		sentencia en un arreglo
		***************************************************************************/
		function Sacar_articulos($sentencia, $lista_articulos)
		{
			$sentencia_sin_articulos="";
			$numero_articulos=count($lista_articulos);
			$numero_palabras=count($sentencia);
			
			$cont=0;
			$aux="";
			
			for($rec_palabra=0; $rec_palabra<$numero_palabras; $rec_palabra++)//recorre el numero de celdas del arreglo
			{	
				$conti=0;
	
				for($rec_stopword=0; $rec_stopword<$numero_articulos; $rec_stopword++)//recorre el numero de stop word encontrado
				{
					
					$aux1=$sentencia[$rec_palabra];
					$aux2=$lista_articulos[$conti][0];
					$conti++;
					
					if(strcmp($aux1,$aux2) == 0)//verifica si existe algun estop word en la sentencia
					{
						$aux="";
						break;
					}
					else
					{ 
						$aux=$aux1; 
					}
				}
				
				if($aux != "")
				{
					$sentencia_sin_articulos[$cont]=$aux;
					$cont++;
				}
				
			}
			
			return $sentencia_sin_articulos; 
		}
		/**************************************************************************
		Esta parte del cogo saca las palabras claves de la oracion o sentencia 
		enviada y devuelve la sentencia en un arreglo
		****************************************************************************/
		function Sacar_sufijos($sentencia, $lista_sufijos)
		{
			$sentencia_clave="";
			$numero_sufijo=count($lista_sufijos);
			$numero_palabras=count($sentencia);
			
			$cont=0;
			$aux="";
			
			for($rec_palabra=0; $rec_palabra<$numero_palabras; $rec_palabra++)//recorre el numero de celdas del arreglo
			{	
				$conti=0;
				$aux1=$sentencia[$rec_palabra];//palabra de la sentencia
				$tam_palabra=strlen($aux1);
				
				for($rec_stopword=0; $rec_stopword<$numero_sufijo; $rec_stopword++)//recorre el numero de stop word encontrado
				{
					$aux2=$lista_sufijos[$conti][0];//sufijo de la base de datos
					$conti++;
					$tam_sufijo=strlen($aux2);
					
					if ( $tam_palabra > $tam_sufijo)
					{
						$final=substr ($aux1,-$tam_sufijo);   //de casona =>ona 
						if( strcasecmp ( $final, $aux2) == 0 )
						{
							$nueva_palabra= substr ($aux1, 0, ($tam_palabra-$tam_sufijo)); 
							$sentencia_clave[$cont][0]=$nueva_palabra;
							$sentencia_clave[$cont][1]=$rec_palabra;
							$cont++;
							break;					
						}
					}
				}
			}
			return $sentencia_clave; 
		}
	
		/**************************************************************************
		Esta funcion devuelve la sentencio y oracion en un arreglo llenada con 
		cada palabra
		***************************************************************************/
		function Separar_palabras($sentencia)
		{
			$sentencia_separada="";
			$sentencia_separada=str_word_count($sentencia, 1, 'àáãç0123456789');
			return $sentencia_separada; 
		}
		
		/**************************************************************************
		Funciones para ver las palabras de la oracion y las listad de articulos,
		sufijos, stop word
		***************************************************************************/
		function mostrar_lista($lista)
		{
			$count=count($lista);
			for($j=0; $j<$count; $j++)
			{
				echo $lista[$j][0]."-";
			}
		}
		
		function mostrar_arreglo($sentencia)
		{
			 for($i=0;$i<count($sentencia);$i++)
			{
				echo $sentencia[$i]." - ";
				
			} 
		}
		function mostrar_arreglo2($sentencia)
		{
			$tam_sentencia=count($sentencia);
			if($tam_sentencia > 1)
			{
				for($i=0; $i<=$tam_sentencia; $i++)
				{
					echo $sentencia[$i][0]." - ".$sentencia[$i][1]." * ";
				}
			} 
			else{
				if($sentencia != NULL or $sentencia != "")
				{
					echo $sentencia[0][0]." - ".$sentencia[0][1]." * ";
				}
				else
				{
					echo "la matriz esta vacia";
				}
				
			}
			echo "llego al final";
		}
		/*************************************************************************
		Esta funcion añana el simbolo "%" entre las palabras claves y las une 
		en una solo cadena para su uso
		**************************************************************************/
		function cadena_busqueda($sentencia)
		{
			$cadena_bucar="";
			$num_sentencia= count($sentencia);
			for($inicio_sentencia=0; $inicio_sentencia < $num_sentencia; $inicio_sentencia++)
			{
				$cadena_buscar=$cadena_buscar."%".$sentencia[$inicio_sentencia];
			}
			$cadena_buscar=$cadena_buscar."%";
			return $cadena_buscar;
		}
		/****************************************************************************
		funcion que compara las cadenas y las remplaza
		*****************************************************************************/
		function comparar_cadena($cadena1, $cadena2)
		{
			$tam_cad2=count($cadena2);
			echo "<br>";
			$tam_cad1=count($cadena1);
			if($cadena1 != NULL or $cadena1 != "")
			{
				for($rec_cadena2=0; $rec_cadena2<$tam_cad2; $rec_cadena2++)
				{
					$valor1=$cadena1[$rec_cadena2][0];
					$cadena2[$cadena1[$rec_cadena2][1]]=$valor1;
				}
			}
			
			return $cadena2;
		}
		/*************************************************************************
		Esta funcion hace el desarrollo de todo el separa de las palabras claves
		de la sentencia u oracion
		  - Saca los sufijos
		  - Saca los stop word
		  - Saca los articulos
		**************************************************************************/	
		function palabra_claves($data_acces, $oracion)
		{
			/*Llenado de listas de sufilos, articulos y stop word*/
			$lista_sufijos=motor::llenado_listas_sufijos($data_acces);
			$lista_articulos=motor::llenado_listas_articulo($data_acces);
			$lista_stop_word=motor::llenado_listas_stopword($data_acces);
	
			$sentencia0=motor::Separar_palabras($oracion);
			
			$sentencia1=motor::Sacar_stop_word($sentencia0, $lista_stop_word);//aqui se elimina los estop word del arreglo
			
			$sentencia2=motor::Sacar_articulos($sentencia1, $lista_articulos);//aqui se eliminan los articulos comunes del arreglo
			
			$sentencia3=motor::Sacar_sufijos($sentencia2, $lista_sufijos);//aqui se allan las palabras claves del arreglo

			$sentencia4=motor::comparar_cadena($sentencia3, $sentencia2);

			$cadena_respuesta=motor::cadena_busqueda($sentencia4);//en esta sentencia añade el el simbolo % y lo une en una sola cadena

			return $cadena_respuesta;
		}
		//cadena de palabras
		function palabra_claves_cadena($data_acces, $oracion)
		{
			/*Llenado de listas de sufilos, articulos y stop word*/
			$lista_sufijos=motor::llenado_listas_sufijos($data_acces);
			$lista_articulos=motor::llenado_listas_articulo($data_acces);
			$lista_stop_word=motor::llenado_listas_stopword($data_acces);
	
			$sentencia0=motor::Separar_palabras($oracion);
			
			$sentencia1=motor::Sacar_stop_word($sentencia0, $lista_stop_word);//aqui se elimina los estop word del arreglo
			
			$sentencia2=motor::Sacar_articulos($sentencia1, $lista_articulos);//aqui se eliminan los articulos comunes del arreglo
			
			$sentencia3=motor::Sacar_sufijos($sentencia2, $lista_sufijos);//aqui se allan las palabras claves del arreglo

			$sentencia4=motor::comparar_cadena($sentencia3, $sentencia2);

			$cadena_respuesta=$sentencia4;//en esta sentencia añade el el simbolo % y lo une en una sola cadena

			return $cadena_respuesta;
		}
	}
	
?>